#include "RegistroFijoNewsIndex.h"

RegistroFijoNewsIndex::RegistroFijoNewsIndex()
{
        this->offsetRegistroEnArchivo = 0;
        this->LongitudRegistroEnArchivo = 0;
        this->offsetRegistroEnArchivoCategoria = 0;
        this->LongitudRegistroEnArchivoCategoria = 0;

        this->setEstadoRegistro(true);
        this->setTamanioBuffer(sizeof(offsetRegistroEnArchivo) +
                sizeof(LongitudRegistroEnArchivo) +
                sizeof(offsetRegistroEnArchivoCategoria) +
                sizeof(LongitudRegistroEnArchivoCategoria));
}

RegistroFijoNewsIndex::~RegistroFijoNewsIndex()
{
}

TCOffsetEnArchivo RegistroFijoNewsIndex::getOffsetRegistroEnArchivo()
{
        return this->offsetRegistroEnArchivo;
}

TCOffsetEnArchivo RegistroFijoNewsIndex::getOffsetRegistroEnArchivoCategoria()
{
        return this->offsetRegistroEnArchivoCategoria;
}

TCLongitudRegistroVariable RegistroFijoNewsIndex::getLongitudRegistroEnArchivo()
{
        //return this->LongitudRegistroEnArchivo;
        //solo uso los ultimos 7 bits de la longitud
        return (this->LongitudRegistroEnArchivo & 0x7FFFFFFF);
}

TCLongitudRegistroVariable RegistroFijoNewsIndex::getLongitudRegistroEnArchivoCategoria()
{
        //uso todos los bits
        return (this->LongitudRegistroEnArchivoCategoria);
}

TCBooleano RegistroFijoNewsIndex::getEstadoRegistro()
{
        //el primer bit de la longitud es el estado
        return ((this->LongitudRegistroEnArchivo & 0x80000000) != 0);
}

void RegistroFijoNewsIndex::setOffsetRegistroEnArchivo(TCOffsetEnArchivo value)
{
        this->offsetRegistroEnArchivo = value;        
}

void RegistroFijoNewsIndex::setOffsetRegistroEnArchivoCategoria(TCOffsetEnArchivo value)
{
        this->offsetRegistroEnArchivoCategoria = value;        
}

void RegistroFijoNewsIndex::setLongitudRegistroEnArchivo(TCLongitudRegistroVariable value)
{
        //this->LongitudRegistroEnArchivo = value;
        if (this->getEstadoRegistro())
        {
                this->LongitudRegistroEnArchivo =
                        (value | 0x80000000);
        }
        else
        {
                this->LongitudRegistroEnArchivo =
                        (value & 0x7FFFFFFF);
        }
}

void RegistroFijoNewsIndex::setLongitudRegistroEnArchivoCategoria(TCLongitudRegistroVariable value)
{
        //uso todos los bits
        this->LongitudRegistroEnArchivoCategoria = value;
}

void RegistroFijoNewsIndex::setEstadoRegistro(TCBooleano value)
{
        if (value)
        {
                this->LongitudRegistroEnArchivo =
                        (this->LongitudRegistroEnArchivo | 0x80000000);
        }
        else
        {
                this->LongitudRegistroEnArchivo =
                        (this->LongitudRegistroEnArchivo & 0x7FFFFFFF);

        }
}

void RegistroFijoNewsIndex::fillBuffer()
{
        this->setTamanioBuffer(sizeof(this->offsetRegistroEnArchivo) +
                sizeof(this->offsetRegistroEnArchivo) +
                sizeof(this->offsetRegistroEnArchivoCategoria) +
                sizeof(this->LongitudRegistroEnArchivoCategoria));
                
        this->crearBuffer();
        this->putIntoBuffer(&this->offsetRegistroEnArchivo, sizeof(this->offsetRegistroEnArchivo));
        this->putIntoBuffer(&this->LongitudRegistroEnArchivo, sizeof(this->offsetRegistroEnArchivo));
        this->putIntoBuffer(&this->offsetRegistroEnArchivoCategoria, sizeof(this->offsetRegistroEnArchivoCategoria));
        this->putIntoBuffer(&this->LongitudRegistroEnArchivoCategoria, sizeof(this->offsetRegistroEnArchivoCategoria));
}

void RegistroFijoNewsIndex::readFromBuffer()
{
        this->getFromBuffer(&this->offsetRegistroEnArchivo, sizeof(this->offsetRegistroEnArchivo));
        this->getFromBuffer(&this->LongitudRegistroEnArchivo, sizeof(this->offsetRegistroEnArchivo));
        this->getFromBuffer(&this->offsetRegistroEnArchivoCategoria, sizeof(this->offsetRegistroEnArchivoCategoria));
        this->getFromBuffer(&this->LongitudRegistroEnArchivoCategoria, sizeof(this->offsetRegistroEnArchivoCategoria));
}

